"""
基本介绍
1、默认情况下，python 不提供抽象类，python 附带一个模块，该模块为定义抽象基类提供了基础，该模块名称为 abc
2、当我们需要抽象基类时，让类继承 ABC （abc 模块的 ABC 类），使用
    @abstractmethod 声明抽象方法（@abstractmethod 用于声明抽象方法的装饰器，在 abc 模块中）
    那么这个类就是抽象类
3、抽象类的价值更多的作用是在于设计，是设计者设计好后，让子类继承并实现抽象类的抽象方法
"""
from typing import override
from abc import ABC, abstractmethod


# 注意，抽象类（含有抽象方法），不能实例化
# TypeError: Can't instantiate abstract class Animal with abstract methods cry
class Animal(ABC):

    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 这时：cry 就是抽象方法，需要子类实现
    @abstractmethod
    def cry(self): ...

class Tigger(Animal):

    @override
    def cry(self):
        print(f'{self.name} is crying')

tiger = Tigger("皮皮", 2)
tiger.cry()